home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1997 #3 / Amiga Plus CD - 1997 - No. 03.iso / pd / programmierung / alienbreed3d2_src / cheesesauce / betpts.s < prev    next >
Text File  |  1997-01-31  |  8KB  |  701 lines

  1. ;0
  2. Darray: dc.l 0
  3. ;4
  4. PXarray: dc.l 0
  5. ;8
  6. PYarray: dc.l 0
  7. ;12
  8. ZWT:
  9. LParray:
  10. x1: dc.w 0
  11. y1: dc.w 0
  12. ;16
  13. RParray:
  14. x2: dc.w 0
  15. y2: dc.w 0
  16. ;20
  17. VCPL:
  18. x3: dc.w 0
  19. VCPR:
  20. y3: dc.w 0
  21. x4: dc.w 0
  22. y4: dc.w 0
  23. PTS: dc.w 0
  24. PWarray: dc.l 0
  25. PUarray: dc.l 0
  26. FL: dc.w 0
  27. ;40
  28. OP: dc.w 0
  29. ;42
  30. FOarray: dc.l 0
  31. ;46
  32. ZOarray: dc.l 0
  33. ;50
  34. FP: dc.w 0
  35. ;52
  36. ZP: dc.w 0
  37. ;54
  38. Start:
  39.  
  40.  movem.l d0-d7/a0-a6,-(a7)
  41.  
  42.  move.w OP(pc),d0
  43.  cmp.w #1,d0
  44.  blt BETPTS
  45.  beq CALCORD
  46.  cmp.w #3,d0
  47.  blt CHKINVIS
  48.  beq ELIMINLEFT
  49.  
  50. ELIMINRIGHT:
  51.  
  52.  lea sol(pc),a5
  53.  move.l LParray(pc),a0
  54.  move.l PXarray(pc),a2
  55.  move.l PYarray(pc),a3
  56.  move.w VCPL(pc),d7
  57.  subq #1,d7
  58. .outer
  59.  move.w VCPL(pc),d6
  60.  subq #1,d6
  61.  sub.w d7,d6
  62.  move.w d7,-(a7)
  63.  
  64.  move.l (a0)+,d0
  65.  blt .notthis
  66.  move.l (a3,d0.w*4),d1
  67.  move.l (a2,d0.w*4),d0
  68.  move.l a0,a1
  69.  
  70. .inner
  71.  move.w #0,(a5)
  72.  move.l (a1)+,d2
  73.  blt.s .notinn
  74.  move.l (a3,d2.w*4),d3
  75.  move.l (a2,d2.w*4),d2
  76.  sub.w d1,d3
  77.  sub.w d0,d2
  78.  
  79.  move.w ZP(pc),d7
  80.  move.l ZOarray(pc),a4
  81. .dest:
  82.  move.l (a4)+,d4
  83.  move.l (a3,d4.w*4),d5
  84.  move.l (a2,d4.w*4),d4
  85.  sub.w d0,d4
  86.  sub.w d1,d5
  87.  muls d2,d5
  88.  muls d3,d4
  89.  sub.l d4,d5
  90.  beq.s .neither
  91.  bgt.s .ssor
  92.  st (a5)
  93.  bra.s .neither
  94. .ssor:
  95.  st 1(a5)
  96. .neither:
  97.  dbra d7,.dest
  98.  
  99.  move.b (a5),d4
  100.  move.b 1(a5),d5
  101.  tst.b d4
  102.  beq.s .nol
  103.  tst.b d5
  104.  bne.s .onboth
  105.  move.l #-1,-4(a1)
  106.  bra.s .onboth 
  107.  
  108. .nol:
  109.  tst.b d5
  110.  beq.s .onboth
  111.  move.l #-1,-4(a0)
  112.  
  113. .onboth:
  114.  
  115. .notinn:
  116.  dbra d6,.inner
  117.  
  118. .notthis:
  119.  
  120.  move.w (a7)+,d7
  121.  dbra d7,.outer
  122.  
  123.  move.l LParray(pc),a0
  124.  move.w VCPL(pc),d0
  125.  move.l a0,a1
  126.  move.w #0,d1
  127. .elim:
  128.  move.l (a0)+,d2
  129.  blt.s .doit
  130.  move.l d2,(a1)+
  131.  addq #1,d1
  132. .doit:
  133.  dbra d0,.elim
  134.  
  135.  lea OP(pc),a0
  136.  move.w d1,(a0)
  137.  
  138.  movem.l (a7)+,d0-d7/a0-a6
  139.  rts
  140.  
  141.  
  142. ELIMINLEFT:
  143.  
  144.  lea sol(pc),a5
  145.  move.l LParray(pc),a0
  146.  move.l PXarray(pc),a2
  147.  move.l PYarray(pc),a3
  148.  move.w #0,d7
  149. .outer
  150.  move.w d7,d6
  151.  addq #1,d6
  152.  move.w d7,-(a7)
  153.  
  154.  move.l (a0)+,d0
  155.  blt .notthis
  156.  move.l (a3,d0.w*4),d1
  157.  move.l (a2,d0.w*4),d0
  158.  move.l a0,a1
  159.  
  160. .inner
  161.  move.w #0,(a5)
  162.  move.l (a1)+,d2
  163.  blt.s .notinn
  164.  move.l (a3,d2.w*4),d3
  165.  move.l (a2,d2.w*4),d2
  166.  sub.w d1,d3
  167.  sub.w d0,d2
  168.  
  169.  move.w ZP(pc),d7
  170.  move.l ZOarray(pc),a4
  171. .dest:
  172.  move.l (a4)+,d4
  173.  move.l (a3,d4.w*4),d5
  174.  move.l (a2,d4.w*4),d4
  175.  sub.w d0,d4
  176.  sub.w d1,d5
  177.  muls d2,d5
  178.  muls d3,d4
  179.  sub.l d4,d5
  180.  beq.s .neither
  181.  bgt.s .ssor
  182.  st (a5)
  183.  bra.s .neither
  184. .ssor:
  185.  st 1(a5)
  186. .neither:
  187.  dbra d7,.dest
  188.  
  189.  move.b (a5),d4
  190.  move.b 1(a5),d5
  191.  tst.b d4
  192.  beq.s .nol
  193.  tst.b d5
  194.  bne.s .onboth
  195.  move.l #-1,-4(a0)
  196.  bra.s .onboth 
  197.  
  198. .nol:
  199.  tst.b d5
  200.  beq.s .onboth
  201.  move.l #-1,-4(a1)
  202.  
  203. .onboth:
  204.  
  205. .notinn:
  206.  add.w #1,d6
  207.  move.w VCPL(pc),d5
  208.  subq #1,d5
  209.  cmp.w d5,d6
  210.  ble .inner
  211.  
  212. .notthis:
  213.  
  214.  move.w (a7)+,d7
  215.  addq #1,d7
  216.  move.w VCPL(pc),d5
  217.  sub.w #2,d5
  218.  cmp.w d5,d7
  219.  ble .outer
  220.  
  221.  move.l LParray(pc),a0
  222.  move.w VCPL(pc),d0
  223.  sub #1,d0
  224.  move.l a0,a1
  225.  move.w #0,d1
  226. .elim:
  227.  move.l (a0)+,d2
  228.  blt.s .doit
  229.  move.l d2,(a1)+
  230.  addq #1,d1
  231. .doit:
  232.  dbra d0,.elim
  233.  
  234.  lea OP(pc),a0
  235.  move.w d1,(a0)
  236.  
  237.  movem.l (a7)+,d0-d7/a0-a6
  238.  rts
  239.  
  240. CHKINVIS:
  241.  
  242.  move.l LParray(pc),a0
  243.  move.l PXarray(pc),a2
  244.  move.l PYarray(pc),a3
  245.  move.w VCPL(pc),d7
  246.  
  247. .outer:
  248.  move.w d7,-(a7)
  249.  
  250.  move.l (a0)+,d0
  251.  move.l (a3,d0.w*4),d1
  252.  move.l (a2,d0.w*4),a5
  253.  move.l RParray(pc),a1
  254.  move.w VCPR(pc),d7
  255. .inner:
  256.  move.l (a1)+,d2
  257.  move.l (a3,d2.w*4),d3
  258.  move.l (a2,d2.w*4),d2
  259.  sub.w a5,d2
  260.  sub.w d1,d3
  261.  
  262.  move.l FOarray(pc),a4
  263.  move.w FP(pc),d6
  264.  
  265. .source:
  266.  move.l (a4)+,d4
  267.  move.l (a3,d4.w*4),d5
  268.  move.l (a2,d4.w*4),d4
  269.  sub.w a5,d4
  270.  sub.w d1,d5
  271.  muls d2,d5
  272.  muls d3,d4
  273.  sub.l d4,d5
  274.  sgt d0
  275.  dbgt d6,.source
  276.  
  277. .outsource:
  278.  
  279.  tst.b d0
  280.  bne.s .notinvis1
  281.  lea OP(pc),a0
  282.  move.w #1,(a0)
  283.  move.w (a7)+,d7
  284.  bra .missout
  285.  
  286. .notinvis1:
  287.  
  288.  move.l ZOarray(pc),a4
  289.  move.w ZP(pc),d6
  290.  
  291. .dest:
  292.  move.l (a4)+,d4
  293.  move.l (a3,d4.w*4),d5
  294.  move.l (a2,d4.w*4),d4
  295.  sub.w a5,d4
  296.  sub.w d1,d5
  297.  muls d2,d5
  298.  muls d3,d4
  299.  sub.l d4,d5
  300.  slt d0
  301.  dblt d6,.dest
  302.  
  303. .outdest:
  304.  
  305.  tst.b d0
  306.  bne.s .notinvis2
  307.  lea OP(pc),a0
  308.  move.w #1,(a0)
  309.  move.w (a7)+,d7
  310.  bra .missout
  311.  
  312. .notinvis2:
  313.  
  314.  dbra d7,.inner
  315.  
  316.  move.w (a7)+,d7
  317.  dbra d7,.outer
  318.  
  319.  lea OP(pc),a0
  320.  move.w #0,(a0)
  321.  
  322. .missout: 
  323.  
  324.  movem.l (a7)+,d0-d7/a0-a6
  325.  rts
  326.  
  327. CALCORD:
  328.  
  329.  move.l ZWT(pc),a4
  330.  move.l ZOarray(pc),a1
  331.  move.l PXarray(pc),a2
  332.  move.l PYarray(pc),a3
  333.  move.w ZP(pc),d7
  334.  lea sol(pc),a5
  335.  
  336.  moveq #0,d0
  337.  moveq #1,d1
  338.  
  339. .outer:
  340.  
  341.  move.w d7,-(a7)
  342.  
  343.  move.l (a1)+,d3
  344.  cmp.l #1,(a4)+
  345.  beq .wallnotline
  346.  move.w FP(pc),d6
  347.  move.l FOarray(pc),a0
  348.  
  349.  move.l (a1),d2
  350.  move.l (a2,d3.w*4),d7
  351.  move.l (a3,d3.w*4),a6
  352.  move.l (a3,d2.w*4),d3
  353.  move.l (a2,d2.w*4),d2
  354.  sub.w d7,d2
  355.  sub.w a6,d3
  356.  clr.w (a5)
  357.  
  358. .inner:
  359.  move.l (a0)+,d4
  360.  move.l (a3,d4.w*4),d5
  361.  move.l (a2,d4.w*4),d4
  362.  sub.w d7,d4
  363.  sub.w a6,d5
  364.  muls d2,d5
  365.  muls d3,d4
  366.  sub.l d4,d5
  367.  beq.s .noset
  368.  bgt.s .setr
  369.  st (a5)
  370.  bra.s .noset
  371. .setr:
  372.  st 1(a5) 
  373. .noset:
  374.  
  375.  dbra d6,.inner
  376.  
  377.  tst.b (a5)
  378.  beq.s .nosol
  379.  tst.b 1(a5)
  380.  bne.s .nothing
  381.  bset d1,d0
  382.  bra.s .nothing
  383.  
  384. .nosol:
  385.  tst.b 1(a5)
  386.  beq.s .nothing 
  387.  bset d1,d0
  388.  addq #1,d1
  389.  bset d1,d0
  390.  subq #1,d1
  391.  
  392. .nothing:
  393.  
  394. .wallnotline:
  395.  
  396.  addq #3,d1
  397.  
  398.  move.w (a7)+,d7
  399.  dbra d7,.outer
  400.  
  401.  lea FP(pc),a0
  402.  move.l d0,(a0)
  403.  
  404.  movem.l (a7)+,d0-d7/a0-a6
  405.  rts
  406.  
  407. sol: dc.b 0
  408. sor: dc.b 0
  409.  
  410. BETPTS: 
  411.  move.w #16,d6
  412.  move.l Darray(pc),a0
  413.  move.l PXarray(pc),a1
  414.  move.l PYarray(pc),a2
  415.  move.l PWarray(pc),a4
  416.  lea x1(pc),a3
  417.  move.w PTS(pc),d7
  418.  
  419.  move.w 4(a3),d2
  420.  move.w (a3),d0
  421.  sub.w d0,d2
  422.  move.w 6(a3),d3
  423.  move.w 2(a3),d1
  424.  sub.w d1,d3
  425.  
  426. calcd1loop:
  427.  move.l (a1)+,d4
  428.  move.l (a2)+,d5
  429.  tst.l (a4)+
  430.  beq.s no1
  431.  sub.w d0,d4
  432.  sub.w d1,d5
  433.  muls d2,d5
  434.  muls d3,d4
  435.  sub.l d4,d5
  436.  move.l d5,(a0)
  437. no1:
  438.  adda.w d6,a0
  439.  dbra d7,calcd1loop
  440.  
  441.  move.l Darray(pc),a0
  442.  addq.l #4,a0
  443.  move.l PXarray(pc),a1
  444.  move.l PYarray(pc),a2
  445.  move.l PWarray(pc),a4
  446.  move.w PTS(pc),d7
  447.  
  448.  move.w 8(a3),d2
  449.  move.w 4(a3),d0
  450.  sub.w d0,d2
  451.  move.w 10(a3),d3
  452.  move.w 6(a3),d1
  453.  sub.w d1,d3
  454.  
  455. calcd2loop:
  456.  move.l (a1)+,d4
  457.  move.l (a2)+,d5
  458.  tst.l (a4)+
  459.  beq.s no2
  460.  sub.w d0,d4
  461.  sub.w d1,d5
  462.  muls d2,d5
  463.  muls d3,d4
  464.  sub.l d4,d5
  465.  move.l d5,(a0)
  466. no2:
  467.  adda.w d6,a0
  468.  dbra d7,calcd2loop
  469.  
  470.  
  471.  move.l Darray(pc),a0
  472.  addq #8,a0
  473.  move.l PXarray(pc),a1
  474.  move.l PYarray(pc),a2
  475.  move.l PWarray(pc),a4
  476.  move.w PTS(pc),d7
  477.  
  478.  move.w 12(a3),d2
  479.  move.w 8(a3),d0
  480.  sub.w d0,d2
  481.  move.w 14(a3),d3
  482.  move.w 10(a3),d1
  483.  sub.w d1,d3
  484.  
  485. calcd3loop:
  486.  move.l (a1)+,d4
  487.  move.l (a2)+,d5
  488.  tst.l (a4)+
  489.  beq.s no3
  490.  sub.w d0,d4
  491.  sub.w d1,d5
  492.  muls d2,d5
  493.  muls d3,d4
  494.  sub.l d4,d5
  495.  move.l d5,(a0)
  496. no3:
  497.  add.w d6,a0
  498.  dbra d7,calcd3loop
  499.  
  500.  move.l Darray(pc),a0
  501.  adda.w #12,a0
  502.  move.l PXarray(pc),a1
  503.  move.l PYarray(pc),a2
  504.  move.l PWarray(pc),a4
  505.  move.w PTS(pc),d7
  506.  
  507.  move.w (a3),d2
  508.  move.w 12(a3),d0
  509.  sub.w d0,d2
  510.  move.w 2(a3),d3
  511.  move.w 14(a3),d1
  512.  sub.w d1,d3
  513.  
  514. calcd4loop:
  515.  move.l (a1)+,d4
  516.  move.l (a2)+,d5
  517.  tst.l (a4)+
  518.  beq.s no4
  519.  
  520.  sub.w d0,d4
  521.  sub.w d1,d5
  522.  muls d2,d5
  523.  muls d3,d4
  524.  sub.l d4,d5
  525.  move.l d5,(a0)
  526. no4:
  527.  add.w d6,a0
  528.  dbra d7,calcd4loop
  529.  
  530.  move.w PTS(pc),d7
  531.  move.l Darray(pc),a0
  532.  move.l PWarray(pc),a1
  533.  move.l PUarray(pc),a2
  534.  move.w FL(pc),d0
  535.  cmp.w #1,d0
  536.  beq FLFR
  537.  bgt TLTR
  538.  
  539. .chck
  540.  
  541.  moveq #0,d5
  542.  tst.l (a1)+
  543.  beq.s .no
  544.  
  545. ; If all d>0:
  546. ; =-3
  547.  
  548. *
  549. ; if d0<=0
  550. ; =-4
  551. ; if d1<=0 or d3<=0
  552. ; =5
  553.  
  554. *
  555.  
  556. ; if d2<=0
  557. ; =-2
  558. ; if d1<=0 or d3<=0
  559. ; =-1
  560.  
  561.  move.l (a0),d0
  562.  sle d0
  563.  move.l 4(a0),d1
  564.  sle d1
  565.  move.l 8(a0),d2
  566.  sle d2
  567.  move.l 12(a0),d3
  568.  sle d3
  569.  
  570.  moveq #-3,d5
  571.  
  572.  move.b d0,d4
  573.  or.b d1,d4
  574.  or.b d2,d4
  575.  or.b d3,d4
  576.  beq.s .allok
  577.  moveq #0,d5
  578.  
  579.  tst.b d0
  580.  beq.s .notf
  581.  moveq #-4,d5
  582.  or.b d1,d3
  583.  beq.s .allok
  584.  moveq #-5,d5 
  585.  bra.s .allok
  586. .notf:
  587.  
  588.  tst.b d2
  589.  beq.s .nots
  590.  moveq #-2,d5
  591.  or.b d1,d3
  592.  beq.s .allok
  593.  moveq #-1,d5
  594. .nots
  595.  
  596. .allok:
  597.  
  598. .no
  599.  move.l d5,(a2)+
  600.  adda.w d6,a0
  601.  dbra d7,.chck
  602.  
  603.  movem.l (a7)+,d0-d7/a0-a6
  604.  rts
  605.  
  606. FLFR:
  607.  
  608. .chck
  609.  moveq #0,d5
  610.  tst.l (a1)+
  611.  beq.s .no
  612.  
  613.  move.l (a0),d0
  614.  sle d0
  615.  move.l 4(a0),d1
  616.  sle d1
  617.  move.l 8(a0),d2
  618.  sle d2
  619.  
  620.  moveq #-3,d5
  621.  
  622.  move.b d0,d3
  623.  or.b d1,d3
  624.  or.b d2,d3
  625.  beq.s .allok
  626.  moveq #0,d5
  627.  
  628.  tst.b d0
  629.  beq.s .notf
  630.  moveq #-4,d5
  631.  or.b d1,d2
  632.  beq.s .allok
  633.  moveq #0,d5
  634.  bra.s .allok
  635. .notf
  636.  
  637.  tst.b d2
  638.  beq.s .nots
  639.  moveq #-2,d5
  640.  or.b d1,d0
  641.  beq.s .allok
  642.  moveq #0,d5
  643. .nots
  644.  
  645. .allok
  646.  
  647. .no
  648.  move.l d5,(a2)+
  649.  adda.w d6,a0
  650.  dbra d7,.chck
  651.  movem.l (a7)+,d0-d7/a0-a6
  652.  rts
  653.  
  654. TLTR:
  655. .chck
  656.  moveq #0,d5
  657.  tst.l (a1)+
  658.  beq.s .no
  659.  
  660.  move.l (a0),d0
  661.  sle d0
  662.  move.l 12(a0),d1
  663.  sle d1
  664.  move.l 8(a0),d2
  665.  sle d2
  666.  
  667.  moveq #-3,d5
  668.  
  669.  move.b d0,d3
  670.  or.b d1,d3
  671.  or.b d2,d3
  672.  beq.s .allok
  673.  moveq #0,d5
  674.  
  675.  tst.b d0
  676.  beq.s .notf
  677.  moveq #-4,d5
  678.  or.b d1,d2
  679.  beq.s .allok
  680.  moveq #0,d5
  681.  bra.s .allok
  682. .notf
  683.  
  684.  tst.b d2
  685.  beq.s .nots
  686.  moveq #-2,d5
  687.  or.b d1,d0
  688.  beq.s .allok
  689.  moveq #0,d5
  690. .nots
  691.  
  692. .allok
  693.  
  694.  
  695. .no
  696.  move.l d5,(a2)+
  697.  adda.w d6,a0
  698.  dbra d7,.chck
  699.  movem.l (a7)+,d0-d7/a0-a6
  700.  rts
  701.